<?php
/**
 * 公用函数
 */


/**
 * 元转分
 */
if (!function_exists('yuan_to_fen')) {
    function yuan_to_fen($yuan)
    {
//        if ($yuan < 0) {
//            throw new Exception("金额不能小于0");
//        }
        return $yuan * 100;
    }
};

/**
 * 分转元
 */
if (!function_exists('fen_to_yuan')) {
    function fen_to_yuan($fen)
    {
//        if ($fen < 0) {
//            throw new Exception("金额不能小于0");
//        }
        return $fen == 0 ? 0 : $fen / 100;
    }
};

/**
 * uuid 生成
 */
if (!function_exists('create_uuid')) {
    function create_uuid()
    {
        $snowflake = app("snowflake");
        return $snowflake->id();
//        return \Ramsey\Uuid\Uuid::uuid4()->getHex();
    }
};

/**
 * 验证手机号是否正确
 * @param INT $mobile
 */
if (!function_exists('is_mobile')) {
    function is_mobile($mobile): bool
    {
        if (!is_numeric($mobile)) {
            return false;

        }

        return (bool)preg_match('#^13[\d]{9}$|^14[5,6,7,8,9]{1}\d{8}$|^15[0-3, 5-9]{1}\d{8}$|^16[2,5,6,7]{1}\d{8}$|^17[0-8]{1}\d{8}$|^18[\d]{9}$|^19[\d]{9}$#', $mobile);

    }
}
/**
 * 验证金额
 */
if (!function_exists('validate_money')) {
    function validate_money($value)
    {
        return preg_match('/(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/', $value);
    }
};

/**
 * 验证身份证
 */
if (!function_exists('validate_identity_card')) {
    function validate_identity_card($identityCard)
    {
        return preg_match('/(^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$)|(^[1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{2}[0-9Xx]$)/', $identityCard);
    }
};


/**
 * 验证 字符串 是否存在互斥字段
 * 例如  饮食习惯，1 荤素均衡，2 荤食为主，3 素食为主，4 嗜盐，5 嗜油，6 嗜糖  中  1，2，3选项互斥
 * 用法 mutex_str($str,[1,2,3])
 */
if (!function_exists('mutex_str')) {
    function mutex_str($str, $data = [], $character = ',')
    {
        if (!$str || !$data) {
            return false;
        }
        $codeArr = explode($character, $str);
        $codeArr = array_flip(array_flip($codeArr));
        $mutexCodeNumber = 0;
        foreach ($codeArr as $v) {
            if (in_array($v, $data)) {
                $mutexCodeNumber++;
            }
        }
        if ($mutexCodeNumber > 1) {
            return true;
        }
        return false;
    }
};

/**
 * 是否包含互斥字段  例如  症状 1 无，2高血压，3糖尿病  选项1就和所有字段互斥
 */
if (!function_exists('mutex_with_all')) {
    function mutex_with_all($str, $mutexCode, $character = ',')
    {
        $str = trim($str, $character);
        if (!$str || ($str == $mutexCode)) {
            return false;
        }
        if (str_contain_code($str, [$mutexCode], false, $character)) {
            return true;
        }
        return false;
    }
};

/**
 * $str是否包含某些字段 例如 1，32，33  str_contact_code("1,32,33",["33"]) 返回 true
 * $isAllContain 是否全部包含 为true 传入字段必须全部存在于 $str时返回true
 *                           为false 传入字段有一个存在即返回true
 */
if (!function_exists('str_contain_code')) {
    function str_contain_code($str, $data, $isAllContain = false, $character = ',')
    {
        $str = trim($str, $character);
        if ($str === '') {
            return false;
        }
        if (!$data) {
            return true;
        }
        if (!is_array($data)) {
            $data = [$data];
        }
        $codeArr = explode($character, $str);
        $codeArr = array_flip(array_flip($codeArr));
        foreach ($data as $v) {
            if (in_array($v, $codeArr)) {
                if (!$isAllContain) {
                    return true;
                }
            } else {
                if ($isAllContain) {
                    return false;
                }
            }
        }
        return $isAllContain;
    }
};

/**
 * 验证字符串是否合法
 * 例如 饮食习惯，1 荤素均衡，2 荤食为主，3 素食为主，4 嗜盐，5 嗜油，6 嗜糖
 * 参数  $str = '1，5，6，7'  中 7不合法
 * 用法 validate_code_str($str,[1,2,3,4,5,6])
 *
 */
if (!function_exists('validate_code_str')) {
    function validate_code_str($str, $data = [], $character = ',')
    {
        if (!$str) {
            return true;
        }
        if (!$data) {
            return false;
        }
        $codeArr = explode($character, $str);
        foreach ($codeArr as $k => $v) {
            if ($v === "" || $v === null) {
                unset($codeArr[$k]);
            }
        }
        $flip = array_flip($codeArr);
        if (count($flip) != count($codeArr)) {
            return false;
        }
        $codeArr = array_flip($flip);
        foreach ($codeArr as $v) {
            if (!in_array($v, $data)) {
                return false;
            }
        }
        return true;
    }
};


/**
 * 创建编号 时间 + 序号（默认5位，左补0）
 */
if (!function_exists('create_number')) {
    function create_number($number, $length = 5, $character = '0')
    {
        return mt_rand(100, 999) . date('Ymd', time()) . str_pad($number, $length, $character, STR_PAD_LEFT);
    }
};

/**
 * 根据生日获取年龄
 */
if (!function_exists('get_age_by_birthday')) {
    function get_age_by_birthday($birthday)
    {
        $age = strtotime($birthday);
        if ($age === false) {
            return false;
        }
        list($y1, $m1, $d1) = explode("-", date("Y-m-d", $age));
        $now = strtotime("now");
        list($y2, $m2, $d2) = explode("-", date("Y-m-d", $now));
        $age = $y2 - $y1;
        if ((int)($m2 . $d2) < (int)($m1 . $d1))
            $age -= 1;
        return $age;
    }
};

/**
 * 递归将数组中的null值转为空字符串
 */
if (!function_exists('unsetNull')) {
    function unsetNull($arr)
    {
        if ($arr !== null) {
            if (is_array($arr)) {
                if (!empty($arr)) {
                    foreach ($arr as $key => $value) {
                        if ($value === null) {
                            $arr[$key] = '';
                        } else {
                            $arr[$key] = unsetNull($value);      //递归再去执行
                        }
                    }
                } else {
                    $arr = [];
                }
            } else {
                if ($arr === null) {
                    $arr = '';
                }         //注意三个等号
            }
        } else {
            $arr = '';
        }
        return $arr;
    }
};

if (!function_exists('array_filter_null')) {
    function array_filter_null($array)
    {
        return array_filter($array, function ($a) {
            return $a !== null;
        });
    }
}

if (!function_exists('array_number_to_int')) {
    function array_number_to_int($array)
    {
        foreach ($array as &$v) {
            if (is_array($v)) {
                $v = array_number_to_int($v);
            }
            if (is_numeric($v)) {
                $v = (int)$v;
            }
        }
        return $array;
    }
}

if (!function_exists('array_number_to_str')) {
    function array_number_to_str($array)
    {
        foreach ($array as &$v) {
            if (is_array($v)) {
                $v = array_number_to_str($v);
            }
            if (is_numeric($v)) {
                $v = (string)$v;
            }
        }
        return $array;
    }
}

if (!function_exists('arr_to_in_sql')) {
    function arr_to_in_sql($arr)
    {
        if (empty($arr) || !is_array($arr)) {
            return "";
        }
        $inSql = "";
        foreach ($arr as $v) {
            if (!is_string($v) && !is_numeric($v)) {
                continue;
            }
            if ($v) {
                $inSql .= "'" . $v . "',";
            }
        }
        $inSql = trim($inSql, ',');
        if (!empty($inSql)) {
            $inSql = "(" . $inSql . ")";
        }
        return $inSql;
    }
}
if (!function_exists('all_array_add')) {
    function all_array_add($array_item)
    {
        $array = array();
        foreach ($array_item as $item) {
            $array = array_merge($array, $item);
        }
        foreach ($array as $key => &$val) {
            $val = 0;
            foreach ($array_item as $item) {
                if (is_numeric($item[$key])) {
                    $val += $item[$key] ?? 0;
                }
            }
        }
        return $array;
    }
}

if (!function_exists('year_time')) {
    function year_time($startTime, $endTime)
    {
        $yearTime = \Illuminate\Support\Carbon::parse($startTime)->addYear()->toDateString();
        if ($yearTime == $endTime) {
            return 1;
        }
        if (\Illuminate\Support\Carbon::parse($startTime)->isCurrentYear() && \Illuminate\Support\Carbon::parse($endTime)->isCurrentYear() && \Illuminate\Support\Carbon::parse($endTime)->addDay()->isNextYear()) {
            return 2;
        }
        return 3;
    }
}

//SQL ADDSLASHES
if (!function_exists('saddslashes')) {
    function saddslashes($string) {
        if(is_array($string)) {
            foreach($string as $key => $val) {
                $string[$key] = saddslashes($val);
            }
        } else {
            $string = addslashes($string);
        }
        return $string;
    }
}


//去掉slassh
if (!function_exists('sstripslashes')) {
    function sstripslashes($string) {
        if(is_array($string)) {
            foreach($string as $key => $val) {
                $string[$key] = sstripslashes($val);
            }
        } else {
            $string = stripslashes($string);
        }
        return $string;
    }
}

if (!function_exists('vdump')) {
    function vdump($array) {
        echo "<pre>";
        print_r($array);
        echo "</pre>";
    }
}


/**
 * 判断字符串是否存在
 *
 * @param   string      $haystack 内容
 * @param   string      $needle 需要查找的内容
 *
 * @return bool
 */
if (!function_exists('strexists')) {
    function strexists($haystack, $needle) {
        return !(stripos($haystack, $needle) === FALSE);
    }
}

if (!function_exists('array_merge_not_null')) {
    function array_merge_not_null(...$arr)
    {
        $res = [];
        foreach ($arr as $v){
            foreach ($v as $kk => $vv){
                if($vv === null || $vv === ""){
                    unset ($v[$kk]);
                }
            }
            $res = array_merge($res,$v);
        }
        return $res;
    }
}
